/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package byblos.apresentacao.objeto;

import byblos.apresentacao.idioma.InterceptadorIdioma;
import byblos.apresentacao.usuario.InterceptadorLogin;
import byblos.negocio.NegocioExcecao;
import byblos.negocio.acomodacao.CategoriaAcomodacao;
import byblos.negocio.objeto.Objeto;
import byblos.negocio.objeto.TipoObjeto;
import byblos.negocio.pacote.Pacote;
import byblos.negocio.pacote.TipoPacote;
import byblos.persistencia.DAO;
import java.util.List;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Logic;
import org.vraptor.annotations.Out;

/**
 *
 * @author Marco Aurélio
 */
@Component
@InterceptedBy(value = {InterceptadorIdioma.class, InterceptadorLogin.class})
public class ObjetoEditarComponent {

//    @In(required = false)
//    private Usuario usuario;
    @Out
    private Objeto objeto;
    @Out
    private List<CategoriaAcomodacao> categorias;
    @Out
    private String mensagemErro;

    @Logic(parameters = {"id"})
    public String editar(int id) {
        objeto = new DAO().localizar(Objeto.class, id);
//        if (objeto.getTipo() == TipoObjeto.PACOTE) {
//            if (!(usuario.getCategoria() == CategoriaUsuario.ADMINISTRADOR)) {
//                mensagemErro = "Usuário sem permissão para tal tarefa!";
//                return "semPermissao";
//            }
//        }
        if (objeto == null) {
            throw new NegocioExcecao("Não foi possível localizar o objeto " + id);
        }

        prepararObjeto(objeto);
        return "ok";
    }

    @Logic(parameters = {"tipo", "tipoPacote"})
    public String adicionar(TipoObjeto tipo, TipoPacote tipoPacote) {
        if (tipo == TipoObjeto.PACOTE) {
//            if (!(usuario.getCategoria() == CategoriaUsuario.ADMINISTRADOR)) {
//                mensagemErro = "Usuário sem permissão para tal tarefa!";
//                return "semPermissao";
//            }
            objeto = tipoPacote.getObjeto();
        } else {
            objeto = tipo.getObjeto();
        }
        prepararObjeto(objeto);
        return "ok";
    }

    private void prepararObjeto(Objeto objeto) {
        if (objeto.getTipo() == TipoObjeto.ACOMODACAO) {
            categorias = new DAO().listar(CategoriaAcomodacao.class);
        } else if (objeto.getTipo() == TipoObjeto.PACOTE) {
            Pacote pacote = (Pacote) objeto;
            List<CategoriaAcomodacao> categorias = new DAO().listar(CategoriaAcomodacao.class);
            for (CategoriaAcomodacao categoria : categorias) {
                pacote.getItemCategoria(categoria);
            }
        }
    }
}